package com.njzxw.fs.commonutil;


import com.github.pagehelper.PageInterceptor;
import com.njzxw.fs.commonutil.db.SqlCostInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.File;
import java.util.Properties;

@Configuration
@EnableScheduling
public class MyConfiguration{

    private Logger logger = LoggerFactory.getLogger(MyConfiguration.class);

    @Bean
    public PageInterceptor pageInterceptor() {
//        System.out.println("??????11?????????????????????????????????");
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        //如果不配置,pagehelper会自动获取连接，检测数据库。也可以自己声明数据库的方言，比如此处用的postgresql。
        properties.setProperty("helperDialect", "postgresql");
        //配置pageNum参数合理化，比如第0页，和超过最后一页，则返会第一页和最后一页。而不是意想不到的数据。
        properties.setProperty("reasonable", "true");
        //支持通过 Mapper 接口参数来传递分页参数”,通过interface传给mapper.xml，默认false不支持.代码实例可见 例子:查询测试代码 , mapper.xml代码,查看详细的写法
        // .展示了两种不同传值方法,
        properties.setProperty("supportMethodsArguments", "true");
        //为了支持PageHelper.startPage(Object params)方法,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;
        // reasonable=reasonable;pageSizeZero=pageSizeZero .
        properties.setProperty("count", "countSql");
        properties.setProperty("params", "count");
        //运行时多数据源(数据库)自动识别，默认值false。true则允许自动识别对应方言的分页.
        properties.setProperty("autoRuntimeDialect", "true");
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }

    /**
     * 添加mybatis拦截器插件
     *
     * @return
     */
    @Bean
    public SqlCostInterceptor sqlStatsInterceptor() {
        SqlCostInterceptor sqlCostInterceptor = new SqlCostInterceptor();
        Properties properties = new Properties();
        properties.setProperty("dialect", "mysql");
        sqlCostInterceptor.setProperties(properties);
        return sqlCostInterceptor;
    }

//    @Bean
//    public FilterRegistrationBean errorFilter() {
//        logger.debug("???????????????????111???????????????1?");
//        FilterRegistrationBean registration = new FilterRegistrationBean(new ErrorFilter());
//        registration.addUrlPatterns("/*"); //
////        registration.addInitParameter("paramName", "paramValue"); //
//        registration.setName("errorMyFilter");
//        registration.setOrder(0);
//        return registration;
//    }


//    /**
//     * 跨域访问
//     *
//     * @return
//     */
//    @Bean
//    public CorsFilter corsFilter() {
//        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
//        final CorsConfiguration config = new CorsConfiguration();
//        config.setAllowCredentials(true); // 允许cookies跨域
//        config.addAllowedOrigin("*");// 允许向该服务器提交请求的URI，*表示全部允许。。这里尽量限制来源域，比如http://xxxx:8080 ,以降低安全风险。。
//        config.addAllowedHeader("*");// 允许访问的头信息,*表示全部
//        config.setMaxAge(18000L);// 预检请求的缓存时间（秒），即在这个时间段里，对于相同的跨域请求不会再预检了
//        config.addAllowedMethod("*");// 允许提交请求的方法，*表示全部允许，也可以单独设置GET、PUT等
//        source.registerCorsConfiguration("/**", config);
//        return new CorsFilter(source);
//    }

}
